<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      // 1：数组的方法
      //1. reduce  如果写了初始值，prev就以初始值为准累计
      // 如果不写初始值，prev就以第一个item为初始值开始累计
      // 数组.reduce( function ( prev, item, index, o ) {}, 初始值 );
      // const re = arr.reduce( function ( prev, item, ) {
      // 	console.log('a');
      // 	return prev + item; }, 0 )
      const arr = [1, 2, 3, 4, 5]
      const re = arr.reduce((prev, item) => prev + item, 0)
      console.log(re)
      // 2.filter
      // 返回值，一个新的，由测试的元素组成
      //可以有一个。两个，三个参数

      const words = [
        'spray',
        'limit',
        'elite',
        'exuberant',
        'destruction',
        'present',
      ]

      const result = words.filter((word) => word.length > 6)
      //箭头函数filter(function(element) { /* … */ })
      // filter((element) => { /* … */ } )

      console.log(result) // 结果： ["exuberant", "destruction", "present"]
      // 3.some
      // 参数，同filter，同时箭头函数
      // some()方法测试中至少不是有 1 个元素通过了被提供的功能测试。
      // 它返回一个布尔类型的值。
      const array = [1, 2, 3, 4, 5]
      const even = (element) => element % 2 === 0

      console.log(array.some(even)) //  true
      // 4.every
      // every()方法目录所有元素的测试是否通过指定函数内的函数返回一个布尔值。
      arr = [12, 5, 8, 130, 44]
      const re = arr.every((x) => x >= 10)
      console.log(re) // false
      arr = [12, 54, 18, 130, 44]
      const re = arr.every((x) => x >= 10)
      console.log(re) // true
      // 5.map   map()方法创建一个新的列表，这个新的列表由原来列出的所有元素
      // 都需要一次提供函数后的返回值组成。
      let arr = ['马云', '马化腾', 'pink']
      // 数组循环  map
      // arr.map(function(数组中每一项，数组下标索引))
      //  const newArr = arr.map(function(item,index){
      //  console.log(item);
      //  console.log(index);
      //  return (item = item + '先生' )// item += '先生'// return item + '先生'
      // })
      let arr = [12,15,42,48,36,52]
    const newArr = arr.map(function(item){
      return item + 6//每一项都加6
    })
    console.log(newArr);//结果为[18,21,48,56,42,58]


     2： 会改变原数组的常用的一些方法：

      // 1、push()// 向数组的末尾添加新内容

      // 参数：要添加的项。传递多个用逗号隔开，任何数据类型都可以

      // 返回值：新增后数组的长度// 是否改变原数组：改变
      let arr = [12, 34, 26]
      arr.push(100) //返回一个新的长度 length=4
      console.log(arr) //结果为 [12,34,26,100]

      // 2、pop()

      // 删除数组的最后一项.参数：无// 返回值：被删除的项

      // 是否改变原数组：改变
      let arr = [108, 112, 39, 10]
      arr.pop() //删除的最后一项为10
      console.log(arr) //[108, 112, 39]
      // 3、unshift()// 向数组首位添加新内容// 参数：要添加的项，多项用','隔开

      // 返回值：新数组的长度// 是否改变原数组：改变
      let arr = ['c', 'd']
      arr.unshift('a', 'b')
      console.log(arr) //["a", "b", "c", "d"]

      // 4、shift()// 删除数组的第一项// 参数：无
      // 返回值：被删除的项// 是否改变原数组：改变
      let arr = [0, 108, 112, 39]
      arr.shift() //删除的第一项为0
      console.log(arr) //[108, 112, 39]
      // 5、sort()// 对数组的元素进行排序（默认是从小到大来排序 并且是根据字符串来排序的）
      // 参数：可选(函数) 规定排序规则 默认排序顺序为按字母升序// 返回值：排序后新数组
      // 是否改变原数组：改变// sort在不传递参数情况下，只能处理10以内（个位数）数字排序
      let arr = [32, 44, 23, 54, 90, 12, 9]
      arr.sort(function (a, b) {
        return a - b // 结果[9, 12, 23, 32, 44, 54, 90]
        // return b-a;  // 结果[90, 54, 44, 32, 23, 12, 9]
      })
      console.log(arr)

      // 6、reverse()  // 反转数组，倒序排列排列// 参数：无
      // 返回值：倒序后新数组// 是否改变原数组：改变

      let arr = [6, 8, 10, 12]
      console.log(arr.reverse()) //[12, 10, 8, 6]

      // 7、splice()
      // 对数组进行增删改，增加：ary.splice(n,0,m)从索引n开始删除0项，把m或者更多的内容插入到索引n的前面
      // 返回空数组// 修改：ary.splice(n,x,m)从索引n开始删除x个，m替换删除的部分
      // 把原有内容删除掉，然后用新内容替换掉
      // 删除：ary.splice(n,m) 从索引n开始删除m个内容（如果第二个参数省略，则从n删除到末尾）
      // 返回删除的新数组，原有数组改变
      //增加
      let arr = [33, 44, 55, 66, 77, 88]
      arr.splice(2, 0, 'a', 'b')
      console.log(arr) // [33, 44, "a", "b", 55, 66, 77, 88]
      //修改
      let arr = [33, 44, 55, 66, 77, 88]
      arr.splice(1, 2, 'x', 'y')
      console.log(arr) // [33, "x", "y", 66, 77, 88]
      //删除
      let arr = [33, 44, 55, 66, 77, 88]
      //console.log(arr.splice(3,2))//[66, 77]
      console.log(arr.splice(3)) //[66, 77, 88]
    </script>
  </body>
</html>
